﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmMttoHorarioProyecto : Form
    {
        [Dependency]
        public IProyectoBL proyBL { get; set; }

        public FrmMttoHorarioProyecto()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public int IdProyecto;
        bool IsNew;

        public void Nuevo()
        {
            hORARIO_PROYECTOBindingSource.AddNew();
            var proyecto = proyBL.GetFromProyectoById(IdProyecto);
            nombreProyectoTextBox.Text = proyecto.NombreProyecto;
            fechaInicioDateTimePicker.Value = proyecto.FechaInicio;
            fechaTerminoDateTimePicker.Value = proyecto.FechaTermino;
            IsNew = true;
        }

        public void Editar()
        {
            IsNew = false;
            var horario = proyBL.GetFromHorarioByIdProyecto(IdProyecto);
            if (horario != null)
            {
                hORARIO_PROYECTOBindingSource.DataSource = horario;
                if (horario.Tipo_Horario == 1)
                {
                    rbtnHorarioCorrido.Checked = true;
                    rbtnHorarioPartido.Checked = false;
                    cbHM_HorAM.SelectedIndex = Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[0] + "" + horario.AM_HoraEntrada.ToArray()[1]) - 1;
                    cbHM_MinAm.SelectedIndex = (Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1 == -1) ? 0 : Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1;
                    cbHM_HorPM.SelectedIndex = Convert.ToInt32(horario.AM_HoraSalida.ToArray()[0] + "" + horario.AM_HoraSalida.ToArray()[1]) - 1;
                    cbHM_MinPM.SelectedIndex = (Convert.ToInt32(horario.AM_HoraSalida.ToArray()[3] + "" + horario.AM_HoraSalida.ToArray()[4]) - 1 == -1) ? 0 : Convert.ToInt32(horario.AM_HoraSalida.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1;
                }
                else if (horario.Tipo_Horario == 2)
                {
                    rbtnHorarioCorrido.Checked = false;
                    rbtnHorarioPartido.Checked = true;

                    //Horario Entrada y Salida en la Mañana
                    var horAM = Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[0] + "" + horario.AM_HoraEntrada.ToArray()[1]) - 1;
                    var minAM = (Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1) == -1 ? 0 : Convert.ToInt32(horario.AM_HoraEntrada.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1;
                    var horPM = Convert.ToInt32(horario.AM_HoraSalida.ToArray()[0] + "" + horario.AM_HoraSalida.ToArray()[1]) - 1;
                    var minPM = (Convert.ToInt32(horario.AM_HoraSalida.ToArray()[3] + "" + horario.AM_HoraSalida.ToArray()[4]) - 1) == -1 ? 0 : Convert.ToInt32(horario.AM_HoraSalida.ToArray()[3] + "" + horario.AM_HoraSalida.ToArray()[4]) - 1;
                    cbHM_HorAM.SelectedIndex = horAM;
                    cbHM_MinAm.SelectedIndex = minAM;
                    cbHM_HorPM.SelectedIndex = horPM;
                    cbHM_MinPM.SelectedIndex = minPM;

                    //Horario Entrada y Salida en la Tarde
                    cbHT_HorPM.SelectedIndex = Convert.ToInt32(horario.PM_HoraEntrada.ToArray()[0] + "" + horario.PM_HoraEntrada.ToArray()[1]) - 1;
                    cbHT_MinPM.SelectedIndex = (Convert.ToInt32(horario.PM_HoraEntrada.ToArray()[3] + "" + horario.PM_HoraEntrada.ToArray()[4]) - 1) == -1 ? 0 : Convert.ToInt32(horario.PM_HoraEntrada.ToArray()[3] + "" + horario.AM_HoraEntrada.ToArray()[4]) - 1;
                    cbHTS_HorPM.SelectedIndex = Convert.ToInt32(horario.PM_HoraSalida.ToArray()[0] + "" + horario.PM_HoraSalida.ToArray()[1]) - 1;
                    cbHTS_MinPM.SelectedIndex = (Convert.ToInt32(horario.PM_HoraSalida.ToArray()[3] + "" + horario.PM_HoraSalida.ToArray()[4]) - 1) == -1 ? 0 : Convert.ToInt32(horario.PM_HoraSalida.ToArray()[3] + "" + horario.PM_HoraSalida.ToArray()[4]) - 1;
                }
            }

            cbTipoMarca.SelectedIndex = horario.Tipo_Marca - 1;
        }

        private void FrmMttoHorarioProyecto_Load(object sender, EventArgs e)
        {
            GroupBoxEnableDisable();
        }

        private void GroupBoxEnableDisable()
        {
            if (rbtnHorarioCorrido.Checked)
            {
                gbHorarioAM.Text = "Horario Corrido";
                gbHorarioAM.Enabled = true;
                gbHorarioPM.Enabled = false;
            }
            else if (rbtnHorarioPartido.Checked)
            {
                gbHorarioAM.Text = "Horario Mañana";
                gbHorarioAM.Enabled = true;
                gbHorarioPM.Enabled = true;
            }
            else
            {
                gbHorarioAM.Text = "Horario Mañana";
                gbHorarioAM.Enabled = false;
                gbHorarioPM.Enabled = false;
            }
        }

        private void rbtnHorarioCorrido_CheckedChanged(object sender, EventArgs e)
        {
            GroupBoxEnableDisable();
        }

        private void rbtnHorarioPartido_CheckedChanged(object sender, EventArgs e)
        {
            GroupBoxEnableDisable();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var _current = hORARIO_PROYECTOBindingSource.Current as HORARIO_PROYECTO;
            var msg = "ERROR";

            if (IsNew)
            {
                try
                {
                    ObtenerHorario(_current);
                    ValorAsignado(_current);
                    _current.IdProyecto = IdProyecto;
                    proyBL.AddHorarioProyecto(_current);
                    MessageBox.Show("Registro Correcto.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                try
                {
                    ObtenerHorario(_current);
                    ValorAsignado(_current);
                    proyBL.UpdateHorarioProyecto(_current);
                    MessageBox.Show("Modificación Correcta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void ValorAsignado(HORARIO_PROYECTO horario)
        {
            if (cbTipoMarca.SelectedIndex >= 0)
            {
                if (cbTipoMarca.SelectedIndex == 0)
                {
                    horario.Tipo_Marca = 1;
                }
                else if (cbTipoMarca.SelectedIndex == 1)
                {
                    horario.Tipo_Marca = 2;
                }
            }
            else
            {
                MessageBox.Show("Seleccione Tipo Marca por favor.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            if (rbtnHorarioCorrido.Checked)
            {
                horario.Tipo_Horario = 1;
            }
            else if (rbtnHorarioPartido.Checked)
            {
                horario.Tipo_Horario = 2;
            }
            else
            {
                MessageBox.Show("Seleccione Tipo Horario por favor.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            if (!string.IsNullOrEmpty(minutosToleranciaTextBox.Text))
            {
                horario.MinutosTolerancia = minutosToleranciaTextBox.Text;
            }
        }

        private void ObtenerHorario(HORARIO_PROYECTO horario)
        {
            if (rbtnHorarioCorrido.Checked)
            {
                string hora_enAM = "", minu_enAM = "";
                string hora_saPM = "", minu_saPM = "";

                if (cbHM_HorAM.SelectedIndex >= 0 && cbHM_MinAm.SelectedIndex >= 0 && cbHM_HorPM.SelectedIndex >= 0 && cbHM_MinPM.SelectedIndex >= 0)
                {
                    hora_enAM = cbHM_HorAM.SelectedItem.ToString();
                    minu_enAM = cbHM_MinAm.SelectedItem.ToString();
                    var horaEntrada = hora_enAM + ":" + minu_enAM;
                    horario.AM_HoraEntrada = horaEntrada;

                    hora_saPM = cbHM_HorPM.SelectedItem.ToString();
                    minu_saPM = cbHM_MinPM.SelectedItem.ToString();
                    var horarioSalida = hora_saPM + ":" + minu_saPM;
                    horario.AM_HoraSalida = horarioSalida;
                    horario.PM_HoraEntrada = "15:00";
                    horario.PM_HoraSalida = "19:00";
                }
                else if (cbHM_HorAM.SelectedIndex < 0 || cbHM_MinAm.SelectedIndex < 0 || cbHM_HorPM.SelectedIndex < 0 || cbHM_MinPM.SelectedIndex < 0)
                {
                    MessageBox.Show("Hora de Entrada. Formato Incorrecto. Ejm: 07:00 - 18:00", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else //Horario partido
            {
                string hora_enAM = "", minu_enAM = "", hora_saAM = "", minu_saAM = "";
                string hora_enPM = "", minu_enPM = "", hora_saPM = "", minu_saPM = "";

                if (cbHM_HorAM.SelectedIndex >= 0 && cbHM_MinAm.SelectedIndex >= 0 && cbHM_HorPM.SelectedIndex >= 0 && cbHM_MinPM.SelectedIndex >= 0)
                {
                    hora_enAM = cbHM_HorAM.SelectedItem.ToString();
                    minu_enAM = cbHM_MinAm.SelectedItem.ToString();
                    var horaAMEntrada = hora_enAM + ":" + minu_enAM;
                    horario.AM_HoraEntrada = horaAMEntrada;

                    hora_saAM = cbHM_HorPM.SelectedItem.ToString();
                    minu_saAM = cbHM_MinPM.SelectedItem.ToString();
                    var horaAMSalida = hora_saAM + ":" + minu_saAM;
                    horario.AM_HoraSalida = horaAMSalida;
                }
                else if (cbHM_HorAM.SelectedIndex < 0 || cbHM_MinAm.SelectedIndex < 0 || cbHM_HorPM.SelectedIndex < 0 || cbHM_MinPM.SelectedIndex >= 0)
                {
                    MessageBox.Show("Horario Mañana. Formato Incorrecto. Ejm: 07:00 - 13:00", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                if (cbHT_HorPM.SelectedIndex >= 0 && cbHT_MinPM.SelectedIndex >= 0 && cbHTS_HorPM.SelectedIndex >= 0 && cbHTS_MinPM.SelectedIndex >= 0)
                {
                    hora_enPM = cbHT_HorPM.SelectedItem.ToString();
                    minu_enPM = cbHT_MinPM.SelectedItem.ToString();
                    var horarioPMEntrada = hora_enPM + ":" + minu_enPM;
                    horario.PM_HoraEntrada = horarioPMEntrada;

                    hora_saPM = cbHTS_HorPM.SelectedItem.ToString();
                    minu_saPM = cbHTS_MinPM.SelectedItem.ToString();
                    var horarioPMSalida = hora_saPM + ":" + minu_saPM;
                    horario.PM_HoraSalida = horarioPMSalida;
                }
                else if (cbHM_HorAM.SelectedIndex < 0 || cbHM_MinAm.SelectedIndex < 0 || cbHM_HorPM.SelectedIndex < 0 || cbHM_MinPM.SelectedIndex >= 0)
                {
                    MessageBox.Show("Horario Tarde. Formato Incorrecto. Ejm: 15:00 - 19:00", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
    }
}
